package com.mastercard.assets.web.struts.actions;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblCampania;
import com.mastercard.assets.jpa.TblCategoria;
import com.mastercard.assets.jpa.TblCuentaPaquete;
import com.mastercard.assets.jpa.TblForma;
import com.mastercard.assets.jpa.TblFormaSalida;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblSubcateg;
import com.mastercard.assets.jpa.TblTipoCampania;
import com.mastercard.assets.jpa.TblTipoCuenta;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetAltaForm;
import com.mastercard.assets.web.struts.forms.AssetAsignarPaquetesForm;
import com.mastercard.assets.web.struts.forms.AssetBorrarForm;
import com.mastercard.assets.web.struts.forms.AssetBuscarForm;
import com.mastercard.assets.web.struts.forms.AssetEditarForm;
import com.mastercard.assets.web.struts.forms.AssetModificarPaquetesForm;
import com.mastercard.assets.web.struts.forms.CampanasPorAutorizarForm;
import com.mastercard.assets.web.struts.forms.FormasAgregarForm;
import com.mastercard.assets.web.struts.forms.FormasEditarForm;
import com.mastercard.assets.web.struts.forms.FormasForm;
import com.mastercard.assets.web.struts.forms.GenerarCampanaForm;
import com.mastercard.assets.web.struts.forms.GenerarCampanaRegistrarForm;
import com.mastercard.assets.web.struts.forms.LoginForm;
import com.mastercard.assets.web.util.to.ManejadorPaquetesAsignados;
import com.mastercard.assets.web.util.to.PaqueteAutorizado;
import com.mastercard.assets.web.util.to.UserLogin;

public class FormasIndexIn
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		int role = user.getActualRoleId( ) ;
		
		if( role != 2 )
			return mapping.findForward( "RoleInvalid" ) ;
		
		// toma el form
		FormasForm f = ( FormasForm ) form ;
		
		// en caso de null
		if( f == null )
			return mapping.findForward( "SourceInvalid" ) ;
		
		// toma los datos
		int cveForma = f.getCveForma( ) , operation = f.getOperacion( ) ,
                        idioma = user.getIdioma( ) ;
		
		System.out.println( "FormasIndexIn.java: operation - " + operation ) ;
		
		TblForma forma = null ;
		
		// revisa operacion
		switch( operation )
		{
			// en caso de agregar forma
			case 1 :
                                if( idioma == 0 ) {
                                    return mapping.findForward( "AddForma" ) ;
                                } else
                                    return mapping.findForward( "AddFormaEng" ) ;
				
			// en caso de eliminar forma
			case 2 :
				
				// levanta la forma
				forma = MasterCardDAO.findFormaById( cveForma ) ;
				
				FormasForm formasForm = new FormasForm( ) ;
				
				formasForm.setCveForma( cveForma ) ;
				
				request.setAttribute( "FormasForm" , formasForm ) ;
				request.setAttribute( "Forma" , forma ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
                                if( idioma == 0 ) {
                                    return mapping.findForward( "RemoveForma" ) ;
                                } else 
                                    return mapping.findForward( "RemoveFormaEng" ) ;
				
				
			// en caso de editar forma
			case 3 :
				
				// levanta la forma
				forma = MasterCardDAO.findFormaById( cveForma ) ;
				
				// lo coloca en el form adecuado
				FormasEditarForm formaEditar = new FormasEditarForm( ) ;
				
				formaEditar.setCveForma( forma.getCveForma( ) ) ;
				formaEditar.setDescripcion( forma.getDescripcion( ) ) ;
				formaEditar.setNombre( forma.getNombre( ) ) ;
				formaEditar.setArchivoFormaName( forma.getArchivoForma( ) ) ;
				
				
				if( MCUtil.getFormaJSPFilePath( forma.getCveForma( ) ) == null )
					// en caso de que exista guarda un 1, sino un 0
					formaEditar.setExistFile( 0 ) ;
				else
					formaEditar.setExistFile( 1 ) ;
				
				List< TblFormaSalida > salidas = new ArrayList< TblFormaSalida >( ) ;
				
				List< TblFormaSalida > salidasA = forma.getTblFormaSalidas( ) ;
				
				for( TblFormaSalida sal : salidasA )
				{
					// en cao de activa
					if( sal.getStatus( ) == 1 )
						salidas.add( sal ) ;
				}
				
				formaEditar.setFormaSalidas( salidas ) ;
				
				System.out.println( "FormasIndexIn.java: nombre - " + formaEditar.getNombre( ) ) ;
				
				request.setAttribute( "FormasEditarForm" , formaEditar ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
                                if( idioma == 0  ) {
                                    return mapping.findForward( "EditForma" ) ;
                                } else 
                                    return mapping.findForward( "EditFormaEng" ) ;
				
				
			// cualquier otro caso
			default :
		}
		
                MasterCardDAO.closeEntityManager( ) ;
		return mapping.findForward( "success" ) ;
	}
	
}
